// Grunt 的入口文件  
// 用户定义一些需要 Grunt 自动执行的任务
// 需要导出一个函数
// 此函数接收一个 grunt 的形参， 内部提供一些创建任务时可以用到的 API  

module.exports = grunt =>{

    // 通过 yarn grunt foo就会去执行所注册的foo任务
    grunt.registerTask('foo', ()=>{
        console.log('hello foo task')
    })

    // 可以对registerTask传递任务描述
    grunt.registerTask('bar', '任务描述', ()=>{
        console.log('hello bar task')
    })

    // yarn run 默认是执行 defaul 任务
    // grunt.registerTask('default', () => {
    //     console.log('default task')
    // })  

    // 第二个参数可以指定此任务的映射任务
    // 这样执行 default 就相当于执行对应任务
    // 这里映射的任务会按顺序依次执行，不会同步执行 
    grunt.registerTask('default', ['foo', 'bar'])

    // grunt 默认采用同步模式
    // 如果需要异步可以使用 this.async() 方法创建回调
    // grunt.registerTask('async-task', ()=>{
    //     setTimeout(()=>{
    //         console.log('async task working~')
    //     }, 1000)
    // })
    
    // 由于函数体中需要使用 this， 所以不能使用箭头函数
    grunt.registerTask('async-task', function (){
        const done = this.async()
        setTimeout(()=>{
            console.log('async task working~')
            done() //结束任务的执行
        }, 1000)
    })

}